/*
 * @Author: 晟松
 * @Date: 2021-12-07 15:32:21
 * @LastEditors: 晟松
 * @LastEditTime: 2022-02-02 22:17:02
 * @FilePath: \mini-vue3d:\Code\node\koa2\volunteer-service\src\main\model\Login.js
 * @Description: login model
 */
import Sequelize from "sequelize";
import { isPhone, isValidateEnum } from "@main/util/ValidateUtil";
import { ParamError } from "../common/CommonError";

export const modelName = "login";

const DataTypes = Sequelize.DataTypes;

export const attributes = {
    phone: {
        type: Sequelize.STRING(20),
        // unique的实现是通过建立索引的方式创建的，只需要建立一次
        // unique: true,
        // 不允许为空
        allowNull: false,
        validate: {
            // 里面的参数详解：https://www.cnblogs.com/dongfang159/p/7463604.html
            // 第二个参数是为了表示是异步的？这里有点不对，这里也不是异步啊
            isPhoneCheck(val, done) {
                // console.log("Sequelize检查val: ", val,typeof val);
                if (val) {
                    if (!isPhone(val)) {
                        throw new ParamError("电话号码格式不正确");
                    }
                } else {
                    console.log("else\n");
                    throw new ParamError("电话号码不能为空");
                }
                done();
            },
        },
    },
    password: {
        type: Sequelize.STRING(64),
        allowNull: false,
        validate: {
            check(val) {
                if (val) {
                    if (val.length < 6) {
                        throw new ParamError("密码不能小于6位");
                    }
                } else {
                    throw new ParamError("密码不能为空");
                }
            },
        },
    },
    // 身份
    identity: {
        type: DataTypes.INTEGER,
        // 不允许为空
        allowNull: false,
        validate: {
            check(val) {
                if (!isValidateEnum(val, "identity")) {
                    throw new ParamError(`identity：${val}值错误`);
                }
            },
        },
    },
    // 这两个是关于区块链的一个记录，主要是记录其中的交易hash和块hash，通过这两个hash就可从区块链中获取到对应的信息
    transactionHash: DataTypes.STRING,
    blockHash: DataTypes.STRING,
};

export const options = {
    // tableName: "t_user_reference",
};
